package com.design.working.service;

import com.design.working.dto.PageControlDTO;
import com.design.working.dto.StudentWorkApplicationDTO;
import com.design.working.dto.StudentWorkMotionDTO;
import com.design.working.dto.student.UpdateIndividualInformationDTO;
import com.design.working.vo.*;
import com.design.working.vo.student.*;

import java.util.List;

/**
 * 学生端服务层
 *
 * @author gavin
 * @date 2022/5/9 12:02
 */
public interface StudentService {

    /**
     * （申请岗位）查找全部岗位（分页）
     *
     * @param place          需要查询的岗位所属的行政分类
     * @param uid            学号
     * @param pageControlDTO 分页参数
     * @return 查询到的岗位
     */
    ResponseVO<List<JobSelectionVO>> selectJob(String place, Integer uid, PageControlDTO pageControlDTO);

    /**
     * 插入学生申请的岗位
     *
     * @param uid                       学生学号
     * @param studentWorkApplicationDTO 前端表单传来的信息
     * @return 成功
     */
    int insertStudentWorkApplication(Integer uid, StudentWorkApplicationDTO studentWorkApplicationDTO);

    /**
     * 查询学生目前在岗岗位
     *
     * @param uid 要查询的学生学号
     * @return 学生在岗岗位
     */
    ResponseVO<List<StudentCurrentWorkVO>> selectCurrentWork(Integer uid);

    /**
     * 查询学生所有的用工岗位 （分页）
     *
     * @param uid            学生学号
     * @param pageControlDTO 分页参数
     * @return 学生所有的用工岗位
     */
    ResponseVO<List<StudentAttendanceVO>> selectAllWork(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 查询学生的考勤记录（分页）
     *
     * @param id             student_to_work的id
     * @param pageControlDTO 分页参数
     * @return 对应工作的考勤记录
     */
    ResponseVO<List<StudentWorkAttendanceVO>> selectAttendanceById(Integer id, PageControlDTO pageControlDTO);

    /**
     * 插入学生申请岗位变更数据
     *
     * @param studentWorkMotionDTO 前端传来的申请数据
     * @return 成功
     */
    int insertStudentWorkMotion(StudentWorkMotionDTO studentWorkMotionDTO);


    /**
     * 查询学生所有的岗位记录（分页）
     *
     * @param uid            学生学号
     * @param pageControlDTO 分页参数
     * @return 该生的所有申请岗位记录
     */
    ResponseVO<List<StudentWorkApplicationRecordVO>> selectAllWorkApplication(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 查询学生工资（分页）
     *
     * @param uid            学生学号
     * @param type           操作：lastMonth-查询上月工资；all-查询历史全部工资
     * @param pageControlDTO 分页参数
     * @return 学生工资信息
     * SQL异常
     */
    ResponseVO<List<StudentSalaryVO>> selectSalary(Integer uid, String type, PageControlDTO pageControlDTO);

    /**
     * 通过学号查询个人信息
     *
     * @param uid 学号
     * @return 相关的个人信息
     */
    ResponseVO<IndividualInformationByUidVO> selectIndividualInformationByUid(Integer uid);

    /**
     * 通过学生学号uid更新个人信息
     *
     * @param uid                            学生学号
     * @param updateIndividualInformationDTO 更新的数据
     * @return 成功
     */
    int updateIndividualInformationByUid(Integer uid, UpdateIndividualInformationDTO updateIndividualInformationDTO);
}
